218. Go GUI套件 fyne筆記
緣由
因為Line的貼圖太多了,
關鍵字跑出來的貼圖,常常又不是自己想要的。
所以我就想要搞像MSN那樣的自訂關鍵字,
至少能夠比較快找到我要的貼圖。
主題
- Demo
go install fyne.io/fyne/v2/cmd/fyne_demo@latest
fyne_demo
-
基本觀念
參考 軒脈刃de刀光劍影 -
主視窗
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Line Sticker Alias")
// 設定視窗的初始大小
myWindow.Resize(fyne.NewSize(800, 600))
// 設定視窗的內容
myWindow.SetContent(CreateUI(myWindow))
// 顯示視窗
myWindow.ShowAndRun()
}
- 傳入型態
傳入建議使用fyne.Window
,因很多UI行為需要的都是window。
如果要開新視窗的話,可以採用下面的程式
func ShowAliasWindow(filePath string, parent fyne.Window) {
w := fyne.CurrentApp().NewWindow("新增別名")
....
}
- 常用選項,按鈕(紅色)、文字方塊(紫色)、圖片(綠色)
// 延遲200ms,啟動按鈕(看起來比較流暢)
aliasButton := widget.NewButton(alias, func() {
time.AfterFunc(200*time.Millisecond, func() {
ShowAliasWindow(fulPath, parent)
})
})
// 文字框
textbox := widget.NewEntry()
textbox.SetPlaceHolder("Enter Keyword...")
// 圖片
img := canvas.NewImageFromFile(fulPath)
img.FillMode = canvas.ImageFillOriginal
- 物件合併
V:vertical
H:horizontal
// 上面 4. 的 aliasButton 跟 img 合併在一起
images = append(images, container.NewVBox(img, aliasButton))
// 將圖片按鈕物件,切成三個一行
grid := container.NewGridWithColumns(3, images...)
//塞入window,顯示。w 為 上面 3 的宣告
w.SetContent(container.NewVScroll(grid))
w.Resize(fyne.NewSize(400, 400))
w.Show()
- dialog
// w 為 fyne.window
// 錯誤對話方塊
err := deleteAlias(stickerId)
if err != nil {
dialog.NewError(err, w).Show()
return // 錯誤發生後,直接返回,停止繼續執行下面的程式碼
}
//訊息對話方塊
dialog.NewInformation("提示", "新增完成!", w).Show()
//開啟資料夾對話方塊
dialog.NewFolderOpen(func(folder fyne.ListableURI, err error) {
if err != nil {
dialog.ShowError(err, w)
return
}
if folder == nil {
return // 使用者按取消
}
inputFolder.SetText(folder.Path())
}, w).Show()
ref.